// 文本框高度自适应
$.fn.autosize = function(options) {
    var defaults={
        maxHeight:null,
        minHeight:$(this).height()
    };
    var opts = $.extend({}, defaults, options);
    return $(this).each(function() {
        $(this).bind('paste cut keydown keyup focus blur',function(){
            var height,style = this.style;
            this.style.height = opts.minHeight + 'px';
            if (this.scrollHeight > opts.minHeight) {
                if (opts.maxHeight && this.scrollHeight > opts.maxHeight) {
                    height = opts.maxHeight;
                    style.overflowY = 'scroll';
                } else {
                    height = this.scrollHeight;
                    style.overflowY = 'hidden';
                }
                
                height = $.browser.msie ? (height-11) : height;
                style.height = height + 'px';
            }
        });
    });
};

$.fn.extend({
	'editor' : function(options) {
		var _options = {
			'welcome' : 'Share what u got on the road : )',
			'color' : 'orange',
			'width' : '580',
			'height' : '30',
			'photoUploadUrl' : '', // 图片上传url
			'sendUrl' : '', // 信息发送url
			'postSuccess' : function() {} // 信息发送成功后的回调方法
		};
		_options = $.extend(_options, options);
		
		var $_editor = $(this);
		
		this.fn = {
			init : function() {
				var _this = this;
				var html = _this.getInitTemplate();
				$_editor.html(html);
				$('#sc_editor').val('');
				$('#sc_editor_manage .cancle').click(function() {
					$('#sc_editor_detail').animate({'height':0}, function() {
						$(this).css({'height': ''}).empty().show();
						$('#sc_editor_manage').hide();
						_this.setThingType('text');
					});
				});
				$('#sc_editor_submit').click(function() {
					_this.postThing();
				});
				this.initPhoto();
				this.initMusic();
				this.initVideo();
				$('#sc_editor').autosize();
			},
			
			// 发送thing
			postThing : function() {
				var _this = this;
				var thing_type = $('#sc_thing_type').val();
				switch(thing_type) {
					case 'text':
						var data = {
							'type' : $('#sc_thing_type').val(),
							'text' : $('#sc_editor').val()
						};
					break;
					case 'photo':
						var data = 'type='+$('#sc_thing_type').val()+'&';
						data += 'text='+encodeURIComponent($('#sc_editor').val())+'&';
						data += $('#sc_photo_gallary').serialize();
					break;
					case 'music':
						var data = {
							'type' : $('#sc_thing_type').val(),
							'text' : $('#sc_editor').val(),
							'url' : $('#sc_music_url').val(),
							'width' : $('#sc_music_width').val(),
							'height' : $('#sc_music_height').val(),
							'image_tmp_name' : $('#sc_image_tmpname').val(), // 预览图存储在服务器端临时名称
							'image_extension' : $('#sc_image_extension').val() // 预览图扩展名
						};
					break;
					case 'video':
						var data = {
							'type' : $('#sc_thing_type').val(),
							'text' : $('#sc_editor').val(),
							'url' : $('#sc_video_url').val(),
							'width' : $('#sc_video_width').val(),
							'height' : $('#sc_video_height').val(),
							'image_tmp_name' : $('#sc_image_tmpname').val(), // 预览图存储在服务器端临时名称
							'image_extension' : $('#sc_image_extension').val() // 预览图扩展名
						};
					break;
				}
				
				if(false == _this.checkPost(thing_type)) return;
				
				$('#sc_editor_submit').addClass('disabled');
				
				$.post(_options.sendUrl, data, function(response) {
					if(SCABISH.isOk(response)) {
						$('#sc_editor').val('');
						$('#sc_editor_manage .cancle').click();
						_options.postSuccess();
						$('#sc_editor_submit').removeClass('disabled');
					} else { // 返回失败代码
						var code = SCABISH.obtain(response);
						if(code == 'user_not_login') { // 未登录
							LOGIN.show(function() {
								if(LOGIN.success) { // 登录成功
									_this.postThing();
								} else { // 被取消登录
									$('#sc_editor_submit').removeClass('disabled');
								}
							});
						} else { // 其他未知问题
							//SCABISH.error(code)
						}
					}
				})
			},
			
			checkPost : function(type) {
				if($.trim($('#sc_editor').val()) == '') {
					$('#sc_editor').val('').focus();
					return false;
				}
				switch(type) {
					case 'text':
						
					break;
					case 'photo':
						if($('#sc_photo_gallary .preview').length == 0) {
							alert('need one or more photo, please');
							return false;
						}
					break;
					case 'music':
						if(!/^http:\/\/.{3,}$/i.test($('#sc_music_url').val())) {
							$('#sc_music_url').focus();
							return false;
						}
						if(!/^[1-9]\d+$/.test($('#sc_music_width').val())) {
							$('#sc_music_width').focus();
							return false;
						}
						if(!/^[1-9]\d+$/.test($('#sc_music_height').val())) {
							$('#sc_music_height').focus();
							return false;
						}
						if($('#sc_image_preview img').length == 0) {
							alert('need a preview image, please');
							return false;
						}
						break;
					case 'video':
						if(!/^http:\/\/.{3,}$/i.test($('#sc_video_url').val())) {
							$('#sc_video_url').focus();
							return false;
						}
						if(!/^[1-9]\d+$/.test($('#sc_video_width').val())) {
							$('#sc_video_width').focus();
							return false;
						}
						if(!/^[1-9]\d+$/.test($('#sc_video_height').val())) {
							$('#sc_video_height').focus();
							return false;
						}
						if($('#sc_image_preview img').length == 0) {
							alert('need a preview image, please');
							return false;
						}
						break;
				}
				return true;
			},
			
			// 设置thing类别
			setThingType : function(type) {
				var opacity = type == 'text' ? 1 : 0.4;
				$('#sc_editor_wrapper ul.thing-type>li').removeClass('selected').css({'opacity':opacity});
				$('#sc_'+type).addClass('selected').css({'opacity':1});
				$('#sc_thing_type').val(type);
			},
			// 初始化图片编辑区域
			initPhoto : function() {
				var _this = this;
				$('#sc_photo').click(function() {
					if($('#sc_photo_wrapper').length != 0) return;
					if($('#sc_thing_type').val() != 'text') return;
					_this.setThingType('photo');
					var tpl = _this.getPhotoTemplate();
					$('#sc_editor_detail').html(tpl);
					$('#sc_editor_manage').show();
					$('#sc_photo_wrapper').slideDown();
					
					// 本地预览图上传
					$('#sc_local_upload').die().click(function() {
						$('#sc_upload_button').click();
					});
					
					// 本地图片选择
					$('#sc_upload_button').die().change(function(e) {
						if(this.value == '') return;
						var files = e.target.files || e.dataTransfer.files;
						for(var i = 0; i < files.length; i++) {
							var file = files[i];
							if(file.type.indexOf("image") != 0) continue;
							(function(file) {
								// 异步发送图片数据到服务器
								$.ajax({
									url : _options.photoUploadUrl,
									type : 'post',
									data : file,
									processData : false, // !important
									success : function(response) {
										if(SCABISH.isOk(response)) {
											var tmpname = SCABISH.obtain(response); // 返回图片存储在服务器端临时名称
											var extension = file.name.substring(file.name.lastIndexOf('.')+1);
											
											var reader = new FileReader();   
											reader.onload = function(e) {
									            $('\
									            <div class="preview">\
									            	<img src="'+this.result+'" style="max-width:120px;max-height:120px;"/>\
									            	<a id="sc_image_delete" href="javascript:;">×</a>\
									            	<input type="hidden" name="image_tmpname[]" value="'+tmpname+'" />\
									            	<input type="hidden" name="image_extension[]" value="'+extension+'" />\
									            </div>\
									            ').hide().prependTo($('#sc_photo_gallary')).fadeIn('slow');
											}   
											reader.readAsDataURL(file);//读取
										}
									}
								});
				            })(file);
						}
					});
				});
			},
			
			// 初始化音乐编辑区域
			initMusic : function() {
				var _this = this;
				$('#sc_music').click(function() {
					if($('#sc_music_wrapper').length != 0) return;
					if($('#sc_thing_type').val() != 'text') return;
					_this.setThingType('music');
					var tpl = _this.getMusicTemplate();
					$('#sc_editor_detail').html(tpl);
					$('#sc_editor_manage').show();
					$('#sc_music_wrapper').slideDown();
					
					// 音乐信息自动填充(获取音乐地址、宽度、高度)
					$('#sc_music_code').die().bind('paste keyup', function() {
						var code = this.value;
						var music_url = code.match(/http:\/\/.+\.swf/i);
						if(music_url) $('#sc_music_url').val(music_url);
						music_width = /width=?=[\'\"]?(\d+)[\'\"]?/i.exec(code);
						if(music_width != null && music_width.length > 1) {
							$('#sc_music_width').val(music_width[1]);
						}
						var music_height = /height=?=[\'\"]?(\d+)[\'\"]?/i.exec(code);
						if(music_height && music_height.length > 1){
							$('#sc_music_height').val(music_height[1]);
						}
					});
					// 音乐预览
					$('#sc_music_preview').die().click(function() {
						if($.trim($('#sc_music_url').val()) == '') return;
						$('#sc_music_preview').fancybox({
							'href'			: $('#sc_music_url').val(),
							'width'			: $('#sc_music_width').val(),
							'height'		: $('#sc_music_height').val(),
					        'autoScale'     : false,
					        'transitionIn'	: 'none',
							'transitionOut'	: 'none',
							'type'			: 'iframe'
						});
					});
					// 本地预览图上传
					$('#sc_local_upload').die().click(function() {
						$('#sc_upload_button').click();
					});
					// 预览图删除
					$('#sc_image_delete').die().live('click', function() {
						$('#sc_image_preview').fadeOut(function() {
							$(this).empty();
							$('#sc_local_upload').show();
							$('#sc_image_loading').hide();
						});
					});
					// 本地图片选择
					$('#sc_upload_button').die().change(function(e) {
						if(this.value == '') return;
						var files = e.target.files || e.dataTransfer.files;
						var file = files[0];
						if(file.type.indexOf("image") != 0) {
							alert('Oh dear! Are u kidding me ? It\'s not an image'); return;
						}
						extension = file.name.substring(file.name.lastIndexOf('.')+1);
						
						$('#sc_local_upload').hide();
						$('#sc_image_preview').empty();
						$('#sc_image_loading').show();
						
						// 异步发送图片数据到服务器
						$.ajax({
							url : _options.photoUploadUrl,
							type : 'post',
							data : file,
							processData : false, // !important
							success : function(response) {
								if(SCABISH.isOk(response)) {
									var tmpname = SCABISH.obtain(response); // 返回图片存储在服务器端临时名称
									$('#sc_image_loading').hide();
									$('#sc_image_extension').val(extension);
									$('#sc_image_tmpname').val(tmpname);
									var reader = new FileReader();   
									reader.onload = function(e) {
							            $('#sc_image_preview').hide().prepend('\
							            	<img src="'+this.result+'" style="max-width:180px;max-height:180px;"/>\
							            	<div><a id="sc_image_delete" href="javascript:;">×</a></div>\
							            ').fadeIn();
									}   
									reader.readAsDataURL(file);//读取
								}
							}
						});
						
					});
					
				});
			},
			// 初始化视频编辑区域
			initVideo : function() {
				var _this = this;
				$('#sc_video').click(function() {
					if($('#sc_video_wrapper').length != 0) return;
					if($('#sc_thing_type').val() != 'text') return;
					_this.setThingType('video');
					var tpl = _this.getVideoTemplate();
					$('#sc_editor_detail').html(tpl);
					$('#sc_editor_manage').show();
					$('#sc_video_wrapper').slideDown();
					
					// 视频信息自动填充(获取视频地址、宽度、高度)
					$('#sc_video_code').die().bind('paste keyup', function() {
						var code = this.value;
						var video_url = code.match(/http:\/\/.+\.swf/i);
						if(video_url) $('#sc_video_url').val(video_url);
						video_width = /width=?=[\'\"]?(\d+)[\'\"]?/i.exec(code);
						if(video_width != null && video_width.length > 1) {
							$('#sc_video_width').val(video_width[1]);
						}
						var video_height = /height=?=[\'\"]?(\d+)[\'\"]?/i.exec(code);
						if(video_height && video_height.length > 1){
							$('#sc_video_height').val(video_height[1]);
						}
					});
					// 视频预览
					$('#sc_video_preview').die().click(function() {
						if($.trim($('#sc_video_url').val()) == '') return;
						$('#sc_video_preview').fancybox({
							'href'			: $('#sc_video_url').val(),
							'width'			: $('#sc_video_width').val(),
							'height'		: $('#sc_video_height').val(),
					        'autoScale'     : false,
					        'transitionIn'	: 'none',
							'transitionOut'	: 'none',
							'type'			: 'iframe'
						});
					});
					// 本地预览图上传
					$('#sc_local_upload').die().click(function() {
						$('#sc_upload_button').click();
					});
					// 预览图删除
					$('#sc_image_delete').die().live('click', function() {
						$('#sc_image_preview').fadeOut(function() {
							$(this).empty();
							$('#sc_local_upload').show();
							$('#sc_image_loading').hide();
						});
					});
					// 本地图片选择
					$('#sc_upload_button').die().change(function(e) {
						if(this.value == '') return;
						var files = e.target.files || e.dataTransfer.files;
						var file = files[0];
						if(file.type.indexOf("image") != 0) {
							alert('Oh dear! Are u kidding me ? It\'s not an image'); return;
						}
						extension = file.name.substring(file.name.lastIndexOf('.')+1);
						
						$('#sc_local_upload').hide();
						$('#sc_image_preview').empty();
						$('#sc_image_loading').show();
						
						// 异步发送图片数据到服务器
						$.ajax({
							url : _options.photoUploadUrl,
							type : 'post',
							data : file,
							processData : false, // !important
							success : function(response) {
								if(SCABISH.isOk(response)) {
									var tmpname = SCABISH.obtain(response); // 返回图片存储在服务器端临时名称
									$('#sc_image_loading').hide();
									$('#sc_image_extension').val(extension);
									$('#sc_image_tmpname').val(tmpname);
									var reader = new FileReader();   
									reader.onload = function(e) {
							            $('#sc_image_preview').hide().append('\
							            	<img src="'+this.result+'" style="max-width:180px;max-height:180px;"/>\
							            	<div><a id="sc_image_delete" href="javascript:;">×</a></div>\
							            ').fadeIn();
									}   
									reader.readAsDataURL(file);//读取
								}
							}
						});
					});
					
				});
			},
			
			// 获取编辑器初始化区域模板
			getInitTemplate : function() {
				return '\
				<div id="sc_editor_wrapper" class="sc-editor-wrapper">\
					<textarea id="sc_editor" class="sc-editor" \
						style="width:'+_options.width+'px;height:'+_options.height+'px" placeholder="'+_options.welcome+'">\
					</textarea>\
					<ul class="thing-type">\
						<li id="sc_photo"></li>\
						<li id="sc_music"></li>\
						<li id="sc_video"></li>\
					</ul>\
					<a id="sc_editor_submit" class="submit" href="javascript:;">Ech<span>.o)</span></a>\
					<div class="clear" style="height:10px;"></div>\
					<input id="sc_thing_type" type="hidden" name="type" value="text" />\
					<div>\
						<div id="sc_editor_manage" class="editor-manage" style="display:none;">\
							<a href="javascript:;" class="cancle" title="取消">×</a>\
						</div>\
						<div id="sc_editor_detail" style="float:left;width:560px;border-left:1px solid #eee;"></div>\
						<div class="clear"></div>\
					</div>\
				</div>';
			},
			// 获取图片编辑区域模板
			getPhotoTemplate : function() {
				return '\
				<ul id="sc_photo_wrapper" style="display:none;">\
					<li class="gallary">\
						<form id="sc_photo_gallary"></form>\
						<div class="clear"></div>\
					</li>\
					<li>\
						<div>\
							<input id="sc_local_upload" class="from-local" type="button" value="本地上传"/>\
							<div class="from-web">\
								<input id="sc_web_image" type="text" style="width:300px;" placeholder="http://" />\
								<input type="button" value="网络引用"/>\
							</div>\
						</div>\
						<input type="file" id="sc_upload_button" accept="image/*" multiple style="display:none;"/>\
					</li>\
				</ul>';
			},
			// 获取音乐编辑区域模板
			getMusicTemplate : function() {
				return '\
				<ul id="sc_music_wrapper" style="display:none;">\
					<li><textarea id="sc_music_code" style="width:520px;height:35px;" placeholder="嘿，把音乐网页代码或flash代码粘贴到这儿来"></textarea></li>\
					<li>地址：<input id="sc_music_url" type="text" name="url" style="width:80%" /><li>\
					<li>\
						<span style="margin-right:20px;">宽度：<input id="sc_music_width" name="width" type="text" style="width:40px" value="480" /></span>\
						<span>高度：<input id="sc_music_height" name="height" type="text" style="width:40px" value="400" /></span>\
						<span style="margin-left:20px;"><a id="sc_music_preview" href="javascript:;">音乐试听</a></span>\
					</li>\
					<li>\
						<div>\
							<a id="sc_local_upload">本地上传</a>\
							<span id="sc_image_loading" class="image-loading" style="display:none;"></span>\
							<div id="sc_image_preview"></div>\
							<input type="hidden" id="sc_image_extension" value="" />\
							<input type="hidden" id="sc_image_tmpname" value="" />\
						</div>\
						<input type="file" id="sc_upload_button" accept="image/*" style="display:none;"/>\
					</li>\
				</ul>';
			},
			// 获取视频编辑区域模板
			getVideoTemplate : function() {
				return '\
				<ul id="sc_video_wrapper" style="display:none;">\
					<li><textarea id="sc_video_code" style="width:520px;height:35px;" placeholder="嘿，把视频网页代码或flash代码粘贴到这儿来"></textarea></li>\
					<li>地址：<input id="sc_video_url" type="text" name="url" style="width:80%" /><li>\
					<li>\
						<span style="margin-right:20px;">宽度：<input id="sc_video_width" name="width" type="text" style="width:40px" value="480" /></span>\
						<span>高度：<input id="sc_video_height" name="height" type="text" style="width:40px" value="400" /></span>\
						<span style="margin-left:20px;"><a id="sc_video_preview" href="javascript:;">视频预览</a></span>\
					</li>\
					<li>\
						<div>\
							<a id="sc_local_upload">本地上传</a>\
							<span id="sc_image_loading" class="image-loading" style="display:none;"></span>\
							<div id="sc_image_preview"></div>\
							<input type="hidden" id="sc_image_extension" value="" />\
							<input type="hidden" id="sc_image_tmpname" value="" />\
						</div>\
						<input type="file" id="sc_upload_button" accept="image/*" style="display:none;"/>\
					</li>\
				</ul>';
			}
		};
		
		this.fn.init();
	}
});
